home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magnum One
/
Magnum One (Mid-American Digital) (Disc Manufacturing).iso
/
d1
/
interce.arc
/
INTERCEP.DOC
< prev
next >
Wrap
Text File
|
1989-04-18
|
7KB
|
153 lines
INTERCEPT/INTERPRET -- monitor DOS and BIOS calls. By:
Ned Konz
210 Oleeta St.
Ormond Bch, FL 32074
BIX:nkonz CIS:76046,223 (904)672-2431
08/02/1987
============================================================
Program description:
============================================================
INTERCEPT (intercep.exe) and INTERPRET (interpre.exe)
were written so I could monitor the interaction between
unknown programs and MS-DOS (and the BIOS). I've used them
to help disassemble and patch programs, as well as to
debug my own programs.
I'll give a short example of how you run INTERCEPT here.
I'm not going to explain what the DOS or BIOS are, or why
anyone should care what a program does with them. If you
don't know, you probably don't need this program. But if
you want to learn about the IBM-PC or MS-DOS, INTERCEPT
makes a good learning tool along with a good book on DOS
(like Peter Norton's "Programmer's Guide to the IBM PC".)
Suppose you were curious about what the DOS utility
"LABEL.COM" does. Run INTERCEPT like this (assuming you've
installed it properly; see a later section of this file):
intercept label
You'll see a logo from INTERCEPT appear, followed by
the normal operation of LABEL. Answer its question, and
it ends. At this point, INTERCEPT runs INTERPRET and
a file called "intercep.out" is produced in the current
directory.
INTERCEP.OUT looks like this:
INTERCEPT/INTERPRET by Ned Konz 08/02/87
dump of DOS/BIOS calls from program "label"
595A:0597 2130 Get DOS version number
595A:05BD 2119 Report current drive
595A:05CC 21 4409 0003 0000 595a 595a 595a 0100 fffe 0882
595A:05E8 211a Set DTA to 595A:0316
595A:05EF 2111 Search for first file matching FCB at 595A:0316
595A:09F5 2140 Write 0014 bytes from 595A:07E0 to file #0002
595A:09F5 2140 Write 0010 bytes from 595A:07E0 to file #0002
595A:09F5 2140 Write 0014 bytes from 595A:07E0 to file #0002
595A:09F5 2140 Write 0014 bytes from 595A:07E0 to file #0002
595A:09F5 2140 Write 0008 bytes from 595A:07E0 to file #0002
595A:0714 213f Read 007F bytes from file #0000 to 595A:0081
595A:09F5 2140 Write 0002 bytes from 595A:07E0 to file #0002
595A:0778 2113 Delete file using FCB at 595A:0343
595A:078A 215b Create new file (name at 595A:0304, attr. 08)
595A:0792 213e Close file handle #0006
595A:0592 214c Terminate process (return code 00)
What the lines mean is this:
* The first field (like "595A:0597") is the program counter address
from which the DOS or BIOS interrupts were called.
* The second field (like "2130") is the interrupt (here 21h, the
DOS catchall interrupt) and (possibly) the AH or AX values
(the 30 here means that AH equaled 30h -- the function code
for "get DOS version number", and AL (the other half of the
A register called AX) was unimportant.
* The rest of the line is a description of what that INTerrupt
call means in the context of MS-DOS or the IBM-PC BIOS, as defined
in the INTERPRE.DAT file. You can change this file if you need to,
to correct it or add other definitions.
In other words, if you used DEBUG to look at LABEL.COM around offset 0597,
you'd see:
3F24:058E B44C MOV AH,4C
3F24:0590 B000 MOV AL,00
3F24:0592 CD21 INT 21
3F24:0594 50 PUSH AX
3F24:0595 B430 MOV AH,30
3F24:0597 CD21 INT 21
3F24:0599 3D0314 CMP AX,1403
3F24:059C 740A JZ 05A8
Note that there are two INT 21 instructions in this short segment.
The one at offset 0592 corresponds to the last line in INTERCEP.OUT:
595A:0592 214c Terminate process (return code 00)
and the one at offset 0597 corresponds to the first line:
595A:0597 2130 Get DOS version number
Note also that the segment values here (3F24:) are different
than in INTERCEP.OUT. This is because both DEBUG and INTERCEPT
ran LABEL.COM as a "child process", and they're different
sizes.
What about the line that reads:
595A:05CC 21 4409 0003 0000 595a 595a 595a 0100 fffe 0882
Well, that's one of those "RESERVED", undocumented DOS calls
which is used frequently by the DOS utilities. I've documented
some of these, like INT 21h, function 37h, sub-functions 01 and 02,
which get and set the DOS parameter switch character (and
are called by the undocumented Turbo C routines getswitchar() and
setswitchar().)
You can run INTERCEPT as "intercep -L" and get a long-form
output, with the values of all the registers at each call.
============================================================
INSTALLING INTERCEPT:
============================================================
INTERCEPT is supplied as an ARC file. If you're reading
this, you've figured out how to take apart an ARC file.
Just move the following files to a directory that's
somewhere on your PATH:
INTERCEP.EXE -- The INTERCEPT program itself
INTERPRE.EXE -- The INTERPRET program
INTERPRE.DAT -- The definition of all the interrupts
The rest of the files here are either documentation
or C source text, and aren't necessary to operation of the
program. If you run INTERCEPT without any command-line
arguments, you can get a usage prompt. (see below)
============================================================
Contents of ARC file:
============================================================
Filename Length Method Size Ratio Date Time
-------- ------ ------ ------ ----- ---- ----
INTERCEP.C 11197 Crunched 5798 49% 08-02-87 18:35:42
INTERCEP.DOC 6896 Crunched 3731 46% 08-02-87 19:32:38
INTERCEP.EXE 16400 Crunched 12612 24% 08-02-87 18:41:20
INTERCEP.H 1232 Crunched 802 35% 08-02-87 15:03:42
INTERPRE.C 6291 Crunched 3315 48% 08-02-87 18:37:52
INTERPRE.DAT 7435 Crunched 3960 47% 08-02-87 18:50:22
INTERPRE.EXE 32464 Crunched 8704 74% 08-02-87 18:41:22
---- ------ ------ -----
0007 81915 38922 53%
============================================================
INTERCEPT: Usage:
============================================================
intercept [-l] [-T tmpdir] [-s maxcalls] [-o outfile] program [args[...]]
-l sets long format output: explanation AND register values
-T sets temporary directory for intermediate file to "tmpdir"
(will use TMP or TMPDIR environment vars. if found otherwise)
-s sets the maximum number of SWI records to "maxcalls"
-o names the output filename to "outfile" rather than
the default name ("intercep.out")
program is the name of the program to monitor
args are any command-line arguments to be passed
to the monitored program.
============================================================